home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-07-19 | 2.4 KB | 127 lines | [TEXT/CWIE] |
- UNIT IconCache;
- INTERFACE
-
- USES
- Types, Memory, Icons;
-
- FUNCTION GetCachedIcon(iconID: INTEGER): CIconHandle;
- PROCEDURE PlotCachedIcon(iconID: INTEGER; box: Rect);
- PROCEDURE EmptyIconCache;
-
- IMPLEMENTATION
-
- TYPE
- IconCacheHandle = ^^IconCacheRec;
- IconCacheRec = RECORD
- icon: CIconHandle;
- iconID: INTEGER;
- next: IconCacheHandle;
- END;
-
- VAR
- cacheHead: IconCacheHandle;
-
- FUNCTION FindCachedIcon(iconID: INTEGER): IconCacheHandle;
- VAR
- icon: IconCacheHandle;
-
- BEGIN
- icon := cacheHead;
- WHILE (icon <> NIL) & (icon^^.iconID <> iconID) DO
- icon := icon^^.next;
- FindCachedIcon := icon;
- END;
-
- FUNCTION AllocateIcon(iconID: INTEGER): IconCacheHandle;
- VAR
- icon: IconCacheHandle;
-
- BEGIN
- Handle(icon) := NewHandleClear(SizeOf(IconCacheRec));
- IF icon <> NIL THEN
- BEGIN
- icon^^.icon := GetCIcon(iconID);
- IF icon^^.icon <> NIL THEN
- BEGIN
- HNoPurge(Handle(icon^^.icon));
- icon^^.iconID := iconID;
- icon^^.next := cacheHead;
- cacheHead := icon;
- END
- ELSE
- BEGIN
- DisposeHandle(Handle(icon));
- icon := NIL;
- END;
- END;
-
- AllocateIcon := icon;
- END;
-
- FUNCTION GetCachedIcon(iconID: INTEGER): CIconHandle;
- VAR
- icon: IconCacheHandle;
-
- BEGIN
- icon := FindCachedIcon(iconID);
- IF icon = NIL THEN
- icon := AllocateIcon(iconID);
-
- IF icon = NIL THEN
- GetCachedIcon := NIL
- ELSE
- GetCachedIcon := icon^^.icon;
- END;
-
- PROCEDURE CenterRect (box1, box2: Rect; VAR box3: Rect);
- VAR
- w1, w2: INTEGER;
- h1, h2: INTEGER;
-
- BEGIN
- w1 := box1.right - box1.left;
- h1 := box1.bottom - box1.top;
-
- w2 := box2.right - box2.left;
- h2 := box2.bottom - box2.top;
-
- box3.top := box1.top + h1 DIV 2 - h2 DIV 2;
- box3.left := box1.left + w1 DIV 2 - w2 DIV 2;
- box3.bottom := box3.top + h2;
- box3.right := box3.left + w2;
- END;
-
- PROCEDURE PlotCachedIcon(iconID: INTEGER; box: Rect);
- VAR
- icon: CIconHandle;
-
- BEGIN
- icon := GetCachedIcon(iconID);
-
- IF icon <> NIL THEN
- BEGIN
- CenterRect(box, icon^^.iconPMap.bounds, box);
- PlotCIcon(box, icon);
- END;
- END;
-
- PROCEDURE EmptyIconCache;
- VAR
- icon1, icon2: IconCacheHandle;
-
- BEGIN
- icon1 := cacheHead;
- WHILE (icon1 <> NIL) DO
- BEGIN
- icon2 := icon1;
- icon1 := icon1^^.next;
-
- IF icon2^^.icon <> NIL THEN
- DisposeCIcon(icon2^^.icon);
- DisposePtr(Ptr(icon2));
- END;
-
- cacheHead := NIL;
- END;
-
- END.